package com.itheima;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.function.Consumer;

/**
 * @ProjectName: ybxy6
 * @Titile: HashSetDemo
 * @Author: 86183
 * @Description: TODO
 */
public class HashSetDemo {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("马林");
        list.add("坎特雷拉");
        list.add("坎特雷拉");
        list.add("长离");
        list.add("公孙离");
        System.out.println(list);
        ArrayList<String> newlist=new ArrayList<String>(new HashSet<String>(list));//去除list里面的重复数据
        //创建集合对象
        HashSet<String> hs = new HashSet<>();
        //添加元素
        hs.add("马林");
        hs.add("坎特雷拉");
        hs.add("长离");
        hs.add("公孙离");
        System.out.println(hs);
        //3.迭代器
       Iterator<String> iterator = hs.iterator();
      while (iterator.hasNext()){
          String next = iterator.next();
          System.out.println(next);
      }
//4.取数据（增强for循环）去遍历set集合中的数据
        for(String name: hs){
            System.out.println("name="+name);
        }
        int[]arr={1,2,3,4,5,6,7,8,9,10};
        for(int i:arr){
            System.out.println(i);
        }
        //5.取数据Lambda
        hs.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
            });
        hs.forEach(s->System.out.println(s));
        hs.forEach(System.out::println);
        Student student=new Student("马林",18);
        //toString()
        System.out.println(student.toString());
        }
    }
//6.哈希表底层原理
//1.哈希表初始容量为16，负载因子为0.75，当哈希表元素个数超过16*0.75=12时，则哈希表扩容为2倍，即32，当哈希表元素个数超过32*0.75=24时，则哈希表扩容为4倍，即64
//以此类推
//根据哈希值计算存储位置，哈希算法：（hashcode()%数组长度）计算出存储地址，如果存储位置有元素，则使用拉链法解决冲突，即将元素放在同一个位置的链表上：jdk7之前新元素占老元素的位置
//jdk7之后，如果哈希值相同，则放在同一个位置的，新元素挂在老元素下面，7之前时间复杂度为O(1)到O(n)之间，8之后时间复杂度为O(1)到O（log）